import com.google.appengine.api.datastore.*
import static com.google.appengine.api.datastore.FetchOptions.Builder.*
import com.pobos.model.*
import com.pobos.Codificador


def nomeUsuario = params['usuario']
def contrasinal = params['contrasinal']                         

if (nomeUsuario && contrasinal) {
	
	
	
	Entity usuario = obtenUsuarioSesion(nomeUsuario)
	
	if (usuario) {
		
		//Comprueba si está activo
		if (usuario.activo) {
			def sesion = request.getSession(true)
			
			//Comproba o contrasinal
			String contrasinalCodificado = Codificador.codifica(contrasinal)
			
			if (contrasinalCodificado.equals(usuario.contrasinal)) {
				sesion.setAttribute('usuario',usuario.nome)
				
				request.mensaxeExito = "Benvido, ${usuario.nome}"
					
				if (usuario.perfil) {
					def perfil = obtenPerfil(usuario.perfil)
					if (perfil) {
						sesion.setAttribute('perfil',perfil)
					}
				}
					
				request.perfil = usuario.perfil	
			} else {
				request.erro="O contrasinal non é válido!"
				forward 'login.gtpl'	
			}
			
		} else {
			request.erro="O usuario aínda non está activo!"
		}
		
		forward 'index.gtpl'
	} else {
		request.erro="Non existe ese usuario!"
		forward 'login.gtpl'	
	}
	
} else {
	request.erro="Tes que indicar o teu usuario e contrasinal!"
	forward 'login.gtpl'	
}


def obtenUsuarioSesion(String usuarioSesion) {
	def query = new Query(Usuario.class.simpleName)
	query.addFilter("nome", Query.FilterOperator.EQUAL, usuarioSesion)
	def preparedQuery = datastore.prepare(query)
	
	if (preparedQuery.countEntities() == 0) {
		return null;
	} else {
		if(preparedQuery.countEntities() > 1){
			return preparedQuery.asList(withLimit(1))[0]
		}else{
			return preparedQuery.asSingleEntity()
		}
	}
	
}

def obtenPerfil(Long id) {
	def key = KeyFactory.createKey("Perfil", id)			
	return datastore.get(key)
}  
